package com.example.demo.zaqizabatest.sortalgorithm;

/**
 *
 * 待排序的元素需要实现 Java 的 Comparable 接口，该接口有 compareTo() 方法，可以用它来判断两个元素的大小关系。
 *
 * 使用辅助函数 less() 和 swap() 来进行比较和交换的操作，使得代码的可读性和可移植性更好。
 *
 * 排序算法的成本模型是比较和交换的次数。
 *
 * 代码中都是从小到大排序的，且不考虑数组为空的情况
 *
 * @ClassName Sort 约定
 * @Author lys4134
 * @Date 2021/12/29 09:44:43
 * @Description Sort
 * @Version 1.0
 **/
public abstract class BaseSort<T extends Comparable<T>> {

    public abstract void sort(T[] nums);

    /**
     * 比较v是否小于w，小于返回true，大于或等于返回false
     * @param v
     * @param w
     * @return
     */
    protected boolean less(T v, T w) {
        return v.compareTo(w) < 0;
    }

    /**
     * 交换数组a中下表为i和下表为j的值
     * @param a
     * @param i
     * @param j
     */
    protected void swap(T[] a, int i, int j) {
        T t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    /**
     * 数组打印
     * @param a
     */
    protected void print(int[] a) {
        for (int t : a) {
            System.out.print(t + "\t");
        }
        System.out.println();
    }

    /**
     * 数组打印
     * @param a
     */
    protected void print(T[] a) {
        for (T t : a) {
            System.out.print(t + "\t");
        }
        System.out.println();
    }
}
